package com.smart.community.commons.constant;

/**
 * 用户相关常量
 * 定义用户类型、角色、权限等常量，避免硬编码
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-01-30
 */
public class UserConstants {

    // ==================== 用户类型 ====================
    /**
     * 超级管理员
     */
    public static final Integer USER_TYPE_SUPER_ADMIN = 0;
    
    /**
     * 系统管理员
     */
    public static final Integer USER_TYPE_ADMIN = 1;
    
    /**
     * 普通用户
     */
    public static final Integer USER_TYPE_USER = 2;
    
    /**
     * 物业人员
     */
    public static final Integer USER_TYPE_PROPERTY = 3;

    // ==================== 用户状态 ====================
    /**
     * 用户状态：禁用
     */
    public static final Integer USER_STATUS_DISABLED = 0;
    
    /**
     * 用户状态：正常
     */
    public static final Integer USER_STATUS_NORMAL = 1;

    // ==================== 角色常量 ====================
    /**
     * 超级管理员角色
     */
    public static final String ROLE_SUPER_ADMIN = "SUPER_ADMIN";
    
    /**
     * 系统管理员角色
     */
    public static final String ROLE_ADMIN = "ADMIN";
    
    /**
     * 普通用户角色
     */
    public static final String ROLE_USER = "USER";
    
    /**
     * 物业管理员角色
     */
    public static final String ROLE_PROPERTY_ADMIN = "PROPERTY_ADMIN";

    // ==================== 权限常量 ====================
    // 系统管理权限
    /**
     * 系统管理权限
     */
    public static final String PERMISSION_SYSTEM_MANAGE = "system:manage";
    
    /**
     * 用户管理权限
     */
    public static final String PERMISSION_USER_MANAGE = "system:user:manage";
    
    /**
     * 用户创建权限
     */
    public static final String PERMISSION_USER_CREATE = "user:create";
    
    /**
     * 用户编辑权限
     */
    public static final String PERMISSION_USER_EDIT = "user:edit";
    
    /**
     * 用户删除权限
     */
    public static final String PERMISSION_USER_DELETE = "user:delete";
    
    /**
     * 用户查看权限
     */
    public static final String PERMISSION_USER_VIEW = "user:view";
    
    // 物业管理权限
    /**
     * 物业管理权限
     */
    public static final String PERMISSION_PROPERTY_MANAGE = "property:manage";
    
    /**
     * 物业公司创建权限
     */
    public static final String PERMISSION_PROPERTY_COMPANY_CREATE = "property:company:create";
    
    /**
     * 物业公司编辑权限
     */
    public static final String PERMISSION_PROPERTY_COMPANY_EDIT = "property:company:edit";
    
    /**
     * 物业公司删除权限
     */
    public static final String PERMISSION_PROPERTY_COMPANY_DELETE = "property:company:delete";
    
    /**
     * 物业公司查看权限
     */
    public static final String PERMISSION_PROPERTY_COMPANY_VIEW = "property:company:view";

    // ==================== 请求头常量 ====================
    /**
     * 用户ID请求头
     */
    public static final String HEADER_USER_ID = "X-User-Id";
    
    /**
     * 用户名请求头
     */
    public static final String HEADER_USERNAME = "X-Username";
    
    /**
     * 用户昵称请求头
     */
    public static final String HEADER_NICKNAME = "X-Nickname";
    
    /**
     * 用户类型请求头
     */
    public static final String HEADER_USER_TYPE = "X-User-Type";
    
    /**
     * 用户状态请求头
     */
    public static final String HEADER_USER_STATUS = "X-User-Status";
    
    /**
     * 用户角色请求头
     */
    public static final String HEADER_USER_ROLES = "X-User-Roles";
    
    /**
     * 用户权限请求头
     */
    public static final String HEADER_USER_PERMISSIONS = "X-User-Permissions";
    
    /**
     * Token请求头
     */
    public static final String HEADER_TOKEN = "X-Token";
    
    /**
     * 登录时间请求头
     */
    public static final String HEADER_LOGIN_TIME = "X-Login-Time";

    // ==================== 默认值常量 ====================
    /**
     * 默认用户ID（匿名用户）
     */
    public static final Long DEFAULT_USER_ID = 0L;
    
    /**
     * 默认用户名（匿名用户）
     */
    public static final String DEFAULT_USERNAME = "anonymous";
    
    /**
     * 默认用户类型（匿名用户）
     */
    public static final Integer DEFAULT_USER_TYPE = 0;
    
    /**
     * 默认用户状态（禁用）
     */
    public static final Integer DEFAULT_USER_STATUS = 0;

    // ==================== 工具方法 ====================
    /**
     * 检查是否为管理员用户类型
     * 
     * @param userType 用户类型
     * @return 是否为管理员
     */
    public static boolean isAdminUserType(Integer userType) {
        return USER_TYPE_SUPER_ADMIN.equals(userType) || USER_TYPE_ADMIN.equals(userType);
    }
    
    /**
     * 检查是否为物业用户类型
     * 
     * @param userType 用户类型
     * @return 是否为物业用户
     */
    public static boolean isPropertyUserType(Integer userType) {
        return USER_TYPE_PROPERTY.equals(userType);
    }
    
    /**
     * 检查是否为正常状态
     * 
     * @param status 用户状态
     * @return 是否为正常状态
     */
    public static boolean isNormalStatus(Integer status) {
        return USER_STATUS_NORMAL.equals(status);
    }
    
    /**
     * 检查是否为禁用状态
     * 
     * @param status 用户状态
     * @return 是否为禁用状态
     */
    public static boolean isDisabledStatus(Integer status) {
        return USER_STATUS_DISABLED.equals(status);
    }
} 